import { isString } from '@/utils/is';

import { useNavbarStore } from './store';
import { NavbarOptions } from './types';

/**
 * Navbar 用到的 key
 * @internal
 */
const navbarKey = '__EA_NAVBAR_KEY__';
/** 导航栏用到的 key */
export const getNavbarKey = (selector: string = '') => {
  return selector && isString(selector) ? `${navbarKey}${selector.toUpperCase()}` : navbarKey;
};

/** 使用导航栏-内部
 * @internal
 * @param selector 选择器
 */
export function useNavbarInternal(selector: string = '') {
  /** 选择器键 */
  const selectorKey = getNavbarKey(selector);

  const navbarStore = useNavbarStore();

  /** 获取选项 */
  const options = computed<NavbarOptions>(() => navbarStore.getOptions(selectorKey));

  /** 获取自定义根节点样式 */
  const customStyle = computed(() => navbarStore.getCustomStyle(selectorKey));
  /** 获取自定义根节点样式类 */
  const customClass = computed(() => navbarStore.getCustomClass(selectorKey));
  /** 获取卡片标题 */
  const title = computed(() => navbarStore.getTitle(selectorKey));
  /** 获取左侧文案 */
  const leftText = computed(() => navbarStore.getLeftText(selectorKey));
  /** 获取右侧文案 */
  const rightText = computed(() => navbarStore.getRightText(selectorKey));
  /** 获取是否显示左侧箭头 */
  const leftArrow = computed(() => navbarStore.getLeftArrow(selectorKey));
  /** 获取是否显示下边框 */
  const bordered = computed(() => navbarStore.getBordered(selectorKey));
  /** 获取是否固定到顶部 */
  const fixed = computed(() => navbarStore.getFixed(selectorKey));
  /** 获取固定在顶部时，是否在标签位置生成一个等高的占位元素。 */
  const placeholder = computed(() => navbarStore.getPlaceholder(selectorKey));
  /** 获取导航栏 z-index */
  const zIndex = computed(() => navbarStore.getZIndex(selectorKey));
  /** 获取是否开启顶部安全区适配 */
  const safeAreaInsetTop = computed(() => navbarStore.getSafeAreaInsetTop(selectorKey));
  /** 获取是否禁用左侧按钮，禁用时透明度降低，且无法点击。 */
  const leftDisabled = computed(() => navbarStore.getLeftDisabled(selectorKey));
  /** 获取是否禁用右侧按钮，禁用时透明度降低，且无法点击。 */
  const rightDisabled = computed(() => navbarStore.getRightDisabled(selectorKey));

  /** 设置 */
  const set = (values: NavbarOptions) => {
    return navbarStore.set(selectorKey, values);
  };
  /** 重置 */
  const reset = () => {
    return navbarStore.reset(selectorKey);
  };

  /** 清除自定义根节点样式 */
  const clearCustomStyle = () => {
    return navbarStore.clearCustomStyle(selectorKey);
  };
  /** 清除自定义根节点样式类 */
  const clearCustomClass = () => {
    return navbarStore.clearCustomClass(selectorKey);
  };
  /** 清除卡片标题 */
  const clearTitle = () => {
    return navbarStore.clearTitle(selectorKey);
  };
  /** 清除左侧文案 */
  const clearLeftText = () => {
    return navbarStore.clearLeftText(selectorKey);
  };
  /** 清除右侧文案 */
  const clearRightText = () => {
    return navbarStore.clearRightText(selectorKey);
  };
  /** 清除是否显示左侧箭头 */
  const clearLeftArrow = () => {
    return navbarStore.clearLeftArrow(selectorKey);
  };
  /** 清除是否显示下边框 */
  const clearBordered = () => {
    return navbarStore.clearBordered(selectorKey);
  };
  /** 清除是否固定到顶部 */
  const clearFixed = () => {
    return navbarStore.clearFixed(selectorKey);
  };
  /** 清除固定在顶部时，是否在标签位置生成一个等高的占位元素。 */
  const clearPlaceholder = () => {
    return navbarStore.clearPlaceholder(selectorKey);
  };
  /** 清除导航栏 z-index */
  const clearZIndex = () => {
    return navbarStore.clearZIndex(selectorKey);
  };
  /** 清除是否开启顶部安全区适配 */
  const clearSafeAreaInsetTop = () => {
    return navbarStore.clearSafeAreaInsetTop(selectorKey);
  };
  /** 清除是否禁用左侧按钮，禁用时透明度降低，且无法点击。 */
  const clearLeftDisabled = () => {
    return navbarStore.clearLeftDisabled(selectorKey);
  };
  /** 清除是否禁用右侧按钮，禁用时透明度降低，且无法点击。 */
  const clearRightDisabled = () => {
    return navbarStore.clearRightDisabled(selectorKey);
  };

  return {
    /** 获取选项 */
    options,
    /** 获取自定义根节点样式 */
    customStyle,
    /** 获取自定义根节点样式类 */
    customClass,
    /** 获取卡片标题 */
    title,
    /** 获取左侧文案 */
    leftText,
    /** 获取右侧文案 */
    rightText,
    /** 获取是否显示左侧箭头 */
    leftArrow,
    /** 获取是否显示下边框 */
    bordered,
    /** 获取是否固定到顶部 */
    fixed,
    /** 获取固定在顶部时，是否在标签位置生成一个等高的占位元素。 */
    placeholder,
    /** 获取导航栏 z-index */
    zIndex,
    /** 获取是否开启顶部安全区适配 */
    safeAreaInsetTop,
    /** 获取是否禁用左侧按钮，禁用时透明度降低，且无法点击。 */
    leftDisabled,
    /** 获取是否禁用右侧按钮，禁用时透明度降低，且无法点击。 */
    rightDisabled,
    /** 设置 */
    set,
    /** 重置 */
    reset,
    /** 清除自定义根节点样式 */
    clearCustomStyle,
    /** 清除自定义根节点样式类 */
    clearCustomClass,
    /** 清除卡片标题 */
    clearTitle,
    /** 清除左侧文案 */
    clearLeftText,
    /** 清除右侧文案 */
    clearRightText,
    /** 清除是否显示左侧箭头 */
    clearLeftArrow,
    /** 清除是否显示下边框 */
    clearBordered,
    /** 清除是否固定到顶部 */
    clearFixed,
    /** 清除固定在顶部时，是否在标签位置生成一个等高的占位元素。 */
    clearPlaceholder,
    /** 清除导航栏 z-index */
    clearZIndex,
    /** 清除是否开启顶部安全区适配 */
    clearSafeAreaInsetTop,
    /** 清除是否禁用左侧按钮，禁用时透明度降低，且无法点击。 */
    clearLeftDisabled,
    /** 清除是否禁用右侧按钮，禁用时透明度降低，且无法点击。 */
    clearRightDisabled,
  };
}
